home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 44
/
Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso
/
-in_the_mag-
/
basics
/
amos
/
gridloc.lha
/
gridloc.asc
next >
Wrap
Text File
|
1994-09-05
|
5KB
|
141 lines
' Grid Square <-> latitude/longitude conversion
' originally in QBASIC, from an unknown source
' This Amiga version by Robert Davis K0FPC 3 September 1994
Screen Open 7,640,200,4,Hires
Palette $111,$333,$BBB,$555
Curs Off
STRT:
Gosub RSTCLMNROW
Cls : Locate CLMN,ROW : Gosub ICRW
Print "Grid Square Locator"
Locate CLMN,ROW : Gosub ICRW
Print "Convert FROM?" : Locate CLMN,ROW : Gosub ICRW
Inverse On
Print "L"; : Inverse Off : Print "at/Lon ";
Inverse On
Print "G"; : Inverse Off : Print "rid ";
Inverse On
Print "Q"; : Inverse Off : Print "uit ";
Inverse On
Print "A"; : Inverse Off : Print "bout Grid Locator"
RPT1:
Do
A$=Inkey$
If Upper$(A$)="Q" Then End
If Upper$(A$)="L" Then Goto LL
If Upper$(A$)="G" Then Goto GRID
If Upper$(A$)="A" Then Goto ABOUTIT
Loop
LL:
Rem clear the variable list
E9#=1E-06 : Cls : Gosub RSTCLMNROW
Locate CLMN,ROW : Gosub ICRW :
Print "latitude / longitude"
Locate CLMN,ROW : Gosub ICRW
Print "Enter SOUTH latitude and EAST longitude as NEGATIVE numbers."
Locate CLMN,ROW : Gosub ICRW
Input "latitude (DD.MM) ";L# : Locate CLMN,ROW : Gosub ICRW
If L#<-90.0 or L#>90.0 Then Gosub RNGERR : Goto STRT
Input "longitude (DDD.MM) ";O#
If O#<-180.0 or O#>180.0 Then Gosub RNGERR : Goto STRT
OS=Sgn(O#) : O#=Abs(O#) : LS=Sgn(L#) : L#=Abs(L#)
LA#=(Int(L#)+(L#-Int(L#))/0.6)*LS
LO#=(Int(O#)+(O#-Int(O#))/0.6)*OS
If LO#<0 Then LO#=LO#+360.0
W3#=180.0-LO# : If W3#<0.0 Then W3#=W3#+360.0
W1#=Int(W3#/20.0+E9#)
W2#=Int((W3#-20.0*W1#)/2.0+E9#)+48.0 : W1#=W1#+65.0
W3#=Int(24.0*(W3#/2.0-Int(W3#/2.0))+E9#)+65.0
L1#=Int((LA#+90.0)/10.0+E9#) : L2#=Int(LA#+90.0+E9#-10.0*L1#)
L3#=Int((LA#+90.0-10.0*L1#-L2#)*24.0+E9#)
L1#=L1#+65.0 : L2#=L2#+48.0 : L3#=L3#+65.0
G$=Chr$(W1#)+Chr$(L1#)+Chr$(W2#)+Chr$(L2#)+Chr$(W3#)+Chr$(L3#)
Locate CLMN,ROW : Gosub ICRW
Print "Grid square = ";Upper$(G$) : Curs Off : Gosub ICRW
Locate CLMN+10,ROW : Inverse On : Print " Press a key to continue " : Inverse Off
Wait Key : Goto STRT
GRID:
Rem clear the variables here
E9#=1E-06 : Cls : Gosub RSTCLMNROW
Locate CLMN,ROW : Gosub ICRW : Print "GRID SQUARE" : Locate CLMN,ROW : Gosub ICRW
Print "Enter 2-, 4-, or 6-character grid square." : Locate CLMN,ROW : Gosub ICRW
Print "Short entries are optimized to center of square." : Locate CLMN,ROW : Gosub ICRW
Input "Grid square ";G$ : Curs Off
G$=Upper$(G$)
L3=Len(G$) : If L3<2 or L3>6 Then Goto STRT
If L3=1 or L3=3 or L3=5 Then Goto STRT
If L3=2
G$=G$+"55LL"
End If
If L3=4
G$=G$+"LL"
End If
Locate CLMN,ROW : Gosub ICRW : Print "Grid square = ";G$;" "
Restore : I=0
For X=1 To 6
Read Y$ : Read Z$
T$=Mid$(G$,X,1)
If(T$)<(Y$)
I=1
Else If(T$)>(Z$)
I=1
End If
End If
Next X
If I=1 Then Gosub RNGERR : Goto STRT
Data "A","R","A","S","0","9","0","9","A","X","A","X"
W1#=Asc(Left$(G$,1))-65.0
W2#=Asc(Mid$(G$,3,1))-48.0
W3#=Asc(Mid$(G$,5,1))-65.0
LO#=180.0-20.0*W1#-2.0*W2#-W3#/12.0-1.0/24.0
If LO#<0.0 Then LO#=LO#+360.0
L1#=Asc(Mid$(G$,2,1))-65.0
L2#=Asc(Mid$(G$,4,1))-48.0
L3#=Asc(Right$(G$,1))-65.0
LA#=-90.0+10.0*L1#+L2#+L3#/24.0+1.0/48.0
If LO#>180.0 Then LO#=LO#-360.0
LS=Sgn(LA#) : LA#=Abs(LA#)
L#=(Int(LA#)+Int((LA#-Int(LA#))*60.0)/100.0)*LS
OS=Sgn(LO#) : LO#=Abs(LO#)
O#=(Int(LO#)+Int((LO#-Int(LO#))*60.0)/100.0)*OS
Locate CLMN,ROW : Gosub ICRW
Print "latitude (DD.MM) =";L#
Locate CLMN,ROW : Gosub ICRW
Print "longitude (DDD.MM) =";O#
Locate CLMN,ROW : Gosub ICRW
Print "(SOUTH latitude and EAST longitude shown as negative numbers.)"
Locate CLMN+10,ROW : Inverse On : Print " Press a key to continue " : Inverse Off
Wait Key : Goto STRT
ABOUTIT:
Cls : Menu Off
Gosub RSTCLMNROW : Locate CLMN,ROW : Gosub ICRW
Print " Grid Locator Amiga version in AMOS Basic by Robert Davis, K0FPC"
Locate CLMN,ROW : Gosub ICRW
Print " Calculate grid square anywhere from known latitude and longitude"
Locate CLMN,ROW : Gosub ICRW
Print " Calculate latitude and longitude anywhere from known grid square"
Locate CLMN,ROW : Gosub ICRW
Print " Enter latitude in range 0 - 90 degrees, 0 - 59 minutes."
Locate CLMN,ROW : Gosub ICRW
Print " Enter longitude in range 0 - 180 degrees, 0 - 59 minutes."
Locate CLMN,ROW : Gosub ICRW
Print " Separate degrees and minutes by a . (a period)."
Locate CLMN+10,ROW : Gosub ICRW
Inverse On : Print " Press a key to continue " : Inverse Off
Clear Key
Wait Key
Goto STRT
Rem the increment the row subroutine
ICRW:
Inc ROW : Inc ROW
Return
RNGERR:
Curs Off
Print : Print " Entry out of allowable range."
Print " Press a key to restart program."
Wait Key
Return
RSTCLMNROW:
CLMN=3 : ROW=3
Return